gdk_profiler_add_mark (GDK_PROFILER_CURRENT_TIME, 0, "wayland", "surface commit");
gdk_wayland_surface_commit (surface);
+ gdk_wayland_surface_notify_committed (surface);
gdk_wayland_cairo_context_surface_clear_region (self->paint_surface);
self->paint_surface = NULL;
void gdk_wayland_surface_sync (GdkSurface *surface);
void gdk_wayland_surface_commit (GdkSurface *surface);
+void gdk_wayland_surface_notify_committed (GdkSurface *surface);
void gdk_wayland_surface_request_frame (GdkSurface *surface);
void gdk_wayland_surface_attach_image (GdkSurface *surface,
cairo_surface_t *cairo_surface,
PopupState popup_state;
unsigned int initial_configure_received : 1;
+ unsigned int has_uncommitted_ack_configure : 1;
unsigned int mapped : 1;
unsigned int awaiting_frame : 1;
unsigned int awaiting_frame_frozen : 1;
wl_surface_commit (impl->display_server.wl_surface);
}
+void
+gdk_wayland_surface_notify_committed (GdkSurface *surface)
+{
+ GdkWaylandSurface *impl = GDK_WAYLAND_SURFACE (surface);
+
+ impl->has_uncommitted_ack_configure = FALSE;
+}
+
static void
on_frame_clock_after_paint (GdkFrameClock *clock,
GdkSurface *surface)
{
GdkWaylandSurface *impl = GDK_WAYLAND_SURFACE (surface);
+ if (surface->update_freeze_count == 0 && impl->has_uncommitted_ack_configure)
+ {
+ gdk_wayland_surface_commit (surface);
+ gdk_wayland_surface_notify_committed (surface);
+ }
+
if (impl->awaiting_frame &&
impl->pending_frame_counter == gdk_frame_clock_get_frame_counter (clock))
{
impl->pending.is_initial_configure = TRUE;
}
+ impl->has_uncommitted_ack_configure = TRUE;
+
if (is_realized_popup (surface))
gdk_wayland_surface_configure_popup (surface);
else if (is_realized_toplevel (surface))